/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package busquedaProfundidad;

import java.util.Random;

/**
 *
 * ESTA CLASE ES LA QUE GENERA LAS MATRICES ALEATORIAS
 *
 * ACEPTA PERSONALIZAR VALORES ALEATORIOS PARA LOS CABALLOS NEGROS, LOS BLANCOS
 * O AMBOS
 * 
 * 
 */
public class matrizAleatoria {

    public int [][] matriz;
    //0: vacia
    //1: blanco
    //2: negro

    public matrizAleatoria(){
        matriz = new int[8][8];
        for(int i=0;i<8;i++){
            for(int j=0;j<8;j++){
                this.matriz[i][j]=0;
            }
        }
        
    }

    //Metodo que devuelve los valores de la matriz en consola
    public void devolverValores(){
        for(int i=0;i<8;i++){
            for(int j=0;j<8;j++){
                System.out.print(this.matriz[i][j]);
            }
            System.out.println();
        }
    }
    //Metodo para cargar la matriz aleatoriamente
    public void cargarAleatoriamente(boolean cn, int cantCBus){
        
        //un numero aleatorio para la fila y para la columna del caballo negro
        Random aleatorio = new Random();

        if(cn){

        }else{
        int filaCN;
        int colCN;



        filaCN = aleatorio.nextInt(8);
        colCN = aleatorio.nextInt(8);

        this.matriz[filaCN][colCN] = 2;

        //listo carga caballo negro

        }

        //ahora generamos un numero aleatorio entre 1 y 63 para la cant de caballos bcos

        int cantCB;

        if(cantCBus==0){
            cantCB = aleatorio.nextInt(65);
        }else{
            cantCB = cantCBus;
        }

        

        if(cantCB<1||cantCB>64){

            boolean correcto = true;
            while(correcto){

                cantCB = aleatorio.nextInt(65);
                if(cantCB>0){
                    correcto = false;
                }
            }

        }

        //ahora para cada caballo blanco determinamos su ubicacion
        
        int cantCBaux = 1;

        while(cantCBaux<=cantCB){
            int filaCB;
            int colCB;

            Random ramAUX = new Random();

            filaCB = ramAUX.nextInt(8);
            colCB = ramAUX.nextInt(8);

            if(this.matriz[filaCB][colCB]!=0){
                //quiere decir que la posicion esta ocupada

                boolean libre = true;
                while(libre){

                    filaCB = ramAUX.nextInt(8);
                    colCB = ramAUX.nextInt(8);
                    if(this.matriz[filaCB][colCB]!=0){

                    }else{
                        libre = false;
                        this.matriz[filaCB][colCB]=1;
                    }
                }

            }else{
                this.matriz[filaCB][colCB]=1;
            }

            cantCBaux = cantCBaux + 1;
        }

        //ahi termino de generar los caballos blancos
        

    }
    //Primer metodo que habia sido desarrollado, no usado Actualmente
    //en las busquedas
     public void cargarAleatoriamente(int semilla){

        //un numero aleatorio para la fila y para la columna del caballo negro
        int filaCN;
        int colCN;

        Random aleatorio = new Random();

        filaCN = aleatorio.nextInt(8);
        colCN = aleatorio.nextInt(8);

        this.matriz[filaCN][colCN] = 2;

        //listo carga caballo negro

        //ahora generamos un numero aleatorio entre 1 y 63 para la cant de caballos bcos

        int cantCB;

        cantCB = aleatorio.nextInt(semilla);

        if(cantCB<1||cantCB>=semilla){

            boolean correcto = true;
            while(correcto){

                cantCB = aleatorio.nextInt(semilla);
                if(cantCB>0){
                    correcto = false;
                }
            }

        }

        //ahora para cada caballo blanco determinamos su ubicacion

        int cantCBaux = 1;

        while(cantCBaux<cantCB){
            int filaCB;
            int colCB;

            Random ramAUX = new Random();

            filaCB = ramAUX.nextInt(8);
            colCB = ramAUX.nextInt(8);

            if(this.matriz[filaCB][colCB]!=0){
                //quiere decir que la posicion esta ocupada

                boolean libre = true;
                while(libre){

                    filaCB = ramAUX.nextInt(8);
                    colCB = ramAUX.nextInt(8);
                    if(this.matriz[filaCB][colCB]!=0){

                    }else{
                        libre = false;
                        this.matriz[filaCB][colCB]=1;
                    }
                }

            }else{
                this.matriz[filaCB][colCB]=1;
            }

            cantCBaux = cantCBaux + 1;
        }

        //ahi termino de generar los caballos blancos


    }


    //Getters y Setters
    /**
     * @return the matriz
     */
    public int[][] getMatriz() {
        return matriz;
    }

    /**
     * @param matriz the matriz to set
     */
    public void setMatriz(int[][] matriz) {
        this.matriz = matriz;
    }


    public void colocarCaballoNegro(int x, int y){
        this.matriz[x][y] = 2;
    }
}
